package cz.pecinovsky.english.pojj.adv_demo.cesta_školou.hra;
/* Kodovani UTF-8: Příliš žluťoučký kůň úpěl ďábelské ódy. */

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import java.awt.Point;
import javax.swing.Icon;



/*******************************************************************************
 * Instance třídy {@code Objekt} přestavují objekty v místnostech.
 * Objekty mohou být jak věci, tak i osoby či jiné skutečnosti (vůně,
 * světlo, fluidum, ...).
 * <p>
 * Některé z objekttů mohou charakterizovat stav prostoru (např. je rozsvíceno),
 * jiné mohou být určeny k tomu, aby je hráč "zvednul" a získal tím nějakou
 * schopnost či možnost projít nějakým kritickým místem hry
 * (např. klíč k odemnkuntí dveří).
 * <p>
 * Rozhodnete-li se použít ve hře objekty, které budou obsahovat jiné objekty,
 * (truhla, stůl, ...), můžete je definovat paralelně jako zvláštní druh
 * prostoru, do kterého se "vstupuje" např. příkazem "prozkoumej truhlu"
 * a který se opouští např. příkazem "zavři truhlu".
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
public class Objekt implements IObjectG
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Prefix určující, že předmět nepůjde zvednout. */
    public static final char TĚŽKÝ = '¤';

    /** Univerzílní objekt zastupující všechny nezvednutelné objekty. */
    public static final Objekt TÍHA = new Objekt( TĚŽKÝ + "TÍHA" );


//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    private String  název;
    private boolean zvednutelný;


//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     * @param název
     */
    public Objekt(String název)
    {
        if (název.charAt(0) == TĚŽKÝ) {
            zvednutelný = false;
            this.název = název.substring(1);
        }
        else {
            zvednutelný = true;
            this.název  = název;
        }
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Vrátí název prostoru.
     *
     * @return Název prostoru
     */
    @Override
    public String getName()
    {
        return název;
    }


    /***************************************************************************
     * Vrátí informaci o tom, dá-li se objekt zvednout a vložit do batohu.
     *
     * @return {@code true} - dá se zvednout, jinak {@code false}
     */
    @Override
    public boolean isTransportable()
    {
        return zvednutelný;
    }



//== METODY VYŽADOVANÉ IMPLEMENTOVANÝM ROZHRANÍM PRO 115 =======================

    /***************************************************************************
     * Vrátí odkaz na obrázek daného předmětu.
     *
     * @return  Požadovaný odkaz
     */
    @Override
    public Icon getPicture()
    {
        //TODO Operace ještě není implementována
        throw new UnsupportedOperationException("Prozatím neimplementováno");
    }





//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        Objekt inst = new Objekt();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
